import {PixelRatio} from 'react-native';

/**
 * 估算文本在指定宽度和字体大小下的高度
 * @param {string} text - 要计算的文本内容
 * @param {number} fontSize - 字体大小（pt）
 * @param {number} containerWidth - 容器宽度（px）
 * @returns {number} 估算的高度（px）
 */
export const estimateTextHeight = (
    text: string,
    fontSize: number,
    containerWidth: number
): number => {
    if (!text || !text.length || !containerWidth) return 0;

    const letterSpacing = 0;
    // 将字体大小从 pt 转换为 px（RN 默认使用 pt，实际渲染为 px）
    const fontSizeInPx = PixelRatio.getFontScale() * fontSize;
    const lineHeight = fontSizeInPx * 1.25;

    // 估算每个字符的平均宽度（英文字符约为字体大小的 0.5 倍，中文约为 1 倍）
    const avgCharWidth = estimateAverageCharWidth(text, fontSize);
    console.log('avgCharWidth', avgCharWidth);

    // 计算总字符宽度（包含字间距）
    const totalChars = text.length;
    const totalTextWidth = (avgCharWidth * totalChars) + (letterSpacing * (totalChars - 1));

    // 计算行数（向上取整）
    const lines = Math.ceil(totalTextWidth / containerWidth);

    // 计算总高度（行高 × 行数）
    return Math.ceil(lines * lineHeight);
};

/**
 * 估算文本中字符的平均宽度
 * 区分中英文，中文宽度接近字体大小，英文约为字体大小的一半
 */
const estimateAverageCharWidth = (text: string, fontSize: number) => {
    // 匹配中文字符
    const chineseChars = text.match(/[\u4e00-\u9fa5]/g)?.length || 0;
    const totalChars = text.length;
    // 中文占比
    const chineseRatio = chineseChars / totalChars;
    // 中文平均宽度约为字体大小的 0.9 倍，英文约为 0.5 倍
    return (chineseRatio * fontSize * 0.9) + ((1 - chineseRatio) * fontSize * 0.5);
};
